#ifndef INC_COLOR_H
#define INC_COLOR_H

#include <ostream>
#include "BaseTypes.h"
/*********************************************/
// RGB Color structure
class Color
{
private:
	// Data
	uint8	r,g,b;

	// Friend declaration
	friend std::ostream& operator<<(std::ostream& ostr, const Color& c);		// stream output friend function

public:
	// Methods
	void setGreyScale(const uint8&);					// Sets a greyscale
	void getRGBComponents( uint8&, uint8&, uint8&) const;			// Returns the rgb color values
	void setRGBComponents( const uint8&, const uint8&, const uint8&);	// sets the RGB values
	bool operator==(const Color&) const;					// Equality test
	uint8& operator[](const char&);						// Color component access operator ( slow access )
	Color operator*(const fl64&) const;					// Scales the color with a float between 0 and 1
	Color operator+(const Color&) const;					// Adds 2 colors together

	// Construction / Destruction
	Color( const Color& );					// Copy Constructor
	Color( const uint8, const uint8, const uint8 );		// Overloaded constructor with RGB Color assignments
	Color();						// Constructor
};
/*********************************************/
// Stream output operator
std::ostream& operator<<(std::ostream&, const Color&);

#endif //INC_COLOR_H